# 此文件用于：比较不同excel中的同一行。具体是哪一行，在prime_pics.json中给出
# 图片：115张，模型35个，指标20个
# 1. 将所有模型都集中到一个excel中，如35models.xlsx
# 2. 读取prime_pics.json,将其中指定的行，对表中的所有模型进行抽取。
# 3. 最终生成每个指定行都对应一张sheet，其中记录的是该图片（行数+2）融合时，每个模型在各个指标的评分。

import json
import openpyxl
def extract_rows_and_cmp():

    # 需要定义3个文件的位置
    base_path = "./"
    file_name = "./35models.xlsx"

    with open(base_path + "prime_pics.json", "r", encoding="utf8") as f:
        data = json.loads(f.read())
        picNo = data["picNo"]

    wb = openpyxl.load_workbook(file_name)  # 打开文件,read_only设置为True，则无法按列访问单元格。

    # 首先插入第一行列名
    row1 = ['model', 'sen', 'me', 'mse(small)', 'avg', 'std', 'vifp', 'snr', 'min', 'uqi', 'qabf', 'vif', 'ssim',
            'psnr',
            'ifc', 'q0i', 'ce(small)', 'edge', 'qcv(small)', 'sf', 'qcb']

    new_wb = openpyxl.Workbook()    # 创建新表
    # 按照图片编号来创建表的sheet
    print("正在处理图片：",end= '')
    for pN in picNo:
        print(pN,end=' ')
        # 创建新sheet,sheet名就是图片编号，因此需要创建很多sheet
        new_sheet = new_wb.create_sheet(title=str(pN))

        rows = pN + 1  # 图1在第2行
        new_sheet.append(row1)  # 首先插入第一行列名，横坐标

        #获取源数据表xlsx中所有的表sheet名，然后，把当前图号的页面写满
        # 迭代每个sheet,进行取特定行的操作，写入新表
        for sheet in wb:
            tmpRowData = []
            tmpRowData.append(sheet.title)  # 以模型名为纵坐标

            # 取源数据
            for cell in sheet[rows]:  # sheet是原表
                tmpRowData.append(cell.value)
            new_sheet.append(tmpRowData)  # 新sheet添加原表数据


    #保存为picByNo.xlsx
    xlsx_path = base_path + "picByNo.xlsx"
    new_wb.save(xlsx_path)  # 写入,保存为模型名
    wb.close()

if __name__ == '__main__':
    extract_rows_and_cmp()
    # for i in range(1,116):
    #     print(i,end=',')

    print("OK")